{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "本实践使用多层感知器训练（DNN）模型，用于预测手写数字图片。\n",
    "\n",
    "![](https://ai-studio-static-online.cdn.bcebos.com/ba26eac845334208851e72c7a2dfef5e1eec566894ba430aba7492e72c49cacd)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "首先导入必要的包\n",
    "\n",
    "numpy---------->python第三方库，用于进行科学计算\n",
    "\n",
    "PIL------------> Python Image Library,python第三方图像处理库\n",
    "\n",
    "matplotlib----->python的绘图库 pyplot:matplotlib的绘图框架\n",
    "\n",
    "os------------->提供了丰富的方法来处理文件和目录\n",
    "torchvision----->提供很多数据集的下载，包括COCO，ImageNet，CIFCAR等\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "#导入需要的包\n",
    "import numpy as np\n",
    "import torch \n",
    "from torch import nn\n",
    "from PIL import Image\n",
    "import matplotlib.pyplot as plt\n",
    "import os\n",
    "from torchvision import datasets, transforms,utils"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **Step1：准备数据。**\n",
    "\n",
    "(1)数据集介绍\n",
    "\n",
    "MNIST数据集包含60000个训练集和10000测试数据集。分为图片和标签，图片是28*28的像素矩阵，标签为0~9共10个数字。\n",
    "\n",
    "![](https://ai-studio-static-online.cdn.bcebos.com/fc73217ae57f451a89badc801a903bb742e42eabd9434ecc8089efe19a66c076)\n",
    "\n",
    "(2)data_train和data_test\n",
    "root为数据集存放的路径，transform指定数据集导入的时候需要进行的变换，train设置为true表明导入的是训练集合，否则会测试集合。\n",
    "Compose是把多种数据处理的方法集合在一起。使用transforms进行Tensor格式转换和Batch Normalization。\n",
    "参考：\n",
    "https://zhuanlan.zhihu.com/p/37857371\n",
    "https://zhuanlan.zhihu.com/p/30249139\n",
    "（3）打印看下数据是什么样的？数据已经经过transform的归一化处理"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "class torchvision.transforms.Normalize(mean, std)：\n",
    "给定均值：(R,G,B) 方差：（R，G，B），将会把Tensor正则化。即：Normalized_image=(image-mean)/std.\n",
    "MINIST是（1,28,28）不是RGB的三维，只有一维的灰度图数据，所以不是[0.5,0.5,0.5],而是[0.5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "transform = transforms.Compose([transforms.ToTensor(),\n",
    "                               transforms.Normalize(mean=[0.5],std=[0.5])])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_data = datasets.MNIST(root = \"./data/\",\n",
    "                            transform=transform,\n",
    "                            train = True,\n",
    "                            download = True)\n",
    "\n",
    "test_data = datasets.MNIST(root=\"./data/\",\n",
    "                           transform = transform,\n",
    "                           train = False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "数据下载慢的问题：https://blog.csdn.net/qq_31904559/article/details/96591484?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "10000"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(test_data)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "train_data 的个数：60000个训练样本\n",
    "\n",
    "test_data 的个数：10000个训练样本\n",
    "\n",
    "一个样本的格式为[data,label]，第一个存放数据，第二个存放标签"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "https://pytorch-cn.readthedocs.io/zh/latest/package_references/data/\n",
    "num_workers 表示用多少个子进程加载数据\n",
    "shuffle 表示在装载过程中随机乱序"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_loader = torch.utils.data.DataLoader(train_data,batch_size=64,\n",
    "                                          shuffle=True,num_workers=2)\n",
    "test_loader = torch.utils.data.DataLoader(test_data,batch_size=64,\n",
    "                                          shuffle=True,num_workers=2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "设置batch_size=64后，加载器中的基本单为是一个batch的数据\n",
    "\n",
    "所以train_loader 的长度是60000/64 = 938 个batch\n",
    "\n",
    "test_loader 的长度是10000/64= 157个batch"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "938\n",
      "157\n"
     ]
    }
   ],
   "source": [
    "print(len(train_loader))\n",
    "print(len(test_loader))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "加载到dataloader中后，一个dataloader是一个batch的数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "# data_iter = iter(train_loader)\n",
    "# print(next(data_iter))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从二维数组生成一张图片"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "oneimg,label = train_data[0]\n",
    "oneimg = oneimg.numpy().transpose(1,2,0) \n",
    "std = [0.5]\n",
    "mean = [0.5]\n",
    "oneimg = oneimg * std + mean\n",
    "oneimg.resize(28,28)\n",
    "plt.imshow(oneimg)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从三维生成一张黑白图片"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "oneimg,label = train_data[0]\n",
    "grid = utils.make_grid(oneimg)\n",
    "grid = grid.numpy().transpose(1,2,0) \n",
    "std = [0.5]\n",
    "mean = [0.5]\n",
    "grid = grid * std + mean\n",
    "plt.imshow(grid)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "输出一个batch的图片和标签"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor(4) tensor(7) tensor(6) tensor(6) tensor(1) tensor(2) tensor(1) tensor(3) \n",
      "tensor(2) tensor(9) tensor(6) tensor(2) tensor(5) tensor(0) tensor(7) tensor(1) \n",
      "tensor(6) tensor(2) tensor(2) tensor(3) tensor(7) tensor(2) tensor(2) tensor(3) \n",
      "tensor(4) tensor(6) tensor(3) tensor(3) tensor(8) tensor(3) tensor(6) tensor(6) \n",
      "tensor(7) tensor(4) tensor(3) tensor(0) tensor(2) tensor(1) tensor(2) tensor(0) \n",
      "tensor(3) tensor(9) tensor(2) tensor(2) tensor(4) tensor(5) tensor(7) tensor(0) \n",
      "tensor(5) tensor(0) tensor(5) tensor(8) tensor(3) tensor(9) tensor(8) tensor(2) \n",
      "tensor(7) tensor(5) tensor(8) tensor(2) tensor(6) tensor(8) tensor(9) tensor(1) \n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "images, lables = next(iter(train_loader))\n",
    "img = utils.make_grid(images)\n",
    "# transpose 转置函数(x=0,y=1,z=2),新的x是原来的y轴大小，新的y是原来的z轴大小，新的z是原来的x大小\n",
    "#相当于把x=1这个一道最后面去。\n",
    "img = img.numpy().transpose(1,2,0) \n",
    "std = [0.5]\n",
    "mean = [0.5]\n",
    "img = img * std + mean\n",
    "for i in range(64):\n",
    "    print(lables[i], end=\" \")\n",
    "    i += 1\n",
    "    if i%8 is 0:\n",
    "        print(end='\\n')\n",
    "plt.imshow(img)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **Step2.网络配置**\n",
    "网络结构是两个卷积层，3个全连接层。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Conv2d参数\n",
    "- in_channels(int) – 输入信号的通道数目\n",
    "- out_channels(int) – 卷积产生的通道数目\n",
    "- kerner_size(int or tuple) - 卷积核的尺寸\n",
    "- stride(int or tuple, optional) - 卷积步长\n",
    "- padding(int or tuple, optional) - 输入的每一条边补充0的层数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1.定义一个CNN网络"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch.nn.functional as F\n",
    "class CNN(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(CNN,self).__init__()\n",
    "        self.conv1 = nn.Conv2d(1,32,kernel_size=3,stride=1,padding=1)\n",
    "        self.pool = nn.MaxPool2d(2,2)\n",
    "        self.conv2 = nn.Conv2d(32,64,kernel_size=3,stride=1,padding=1)\n",
    "        self.fc1 = nn.Linear(64*7*7,1024)#两个池化，所以是7*7而不是14*14\n",
    "        self.fc2 = nn.Linear(1024,512)\n",
    "        self.fc3 = nn.Linear(512,10)\n",
    "#         self.dp = nn.Dropout(p=0.5)\n",
    "    def forward(self,x):\n",
    "        x = self.pool(F.relu(self.conv1(x)))\n",
    "        x = self.pool(F.relu(self.conv2(x)))\n",
    "             \n",
    "        x = x.view(-1, 64 * 7* 7)#将数据平整为一维的 \n",
    "        x = F.relu(self.fc1(x))\n",
    "#         x = self.fc3(x)\n",
    "#         self.dp(x)\n",
    "        x = F.relu(self.fc2(x))   \n",
    "        x = self.fc3(x)  \n",
    "#         x = F.log_softmax(x,dim=1) NLLLoss()才需要，交叉熵不需要\n",
    "        return x\n",
    "        \n",
    "net = CNN()        "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2.定义损失函数和优化函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch.optim as optim\n",
    "\n",
    "criterion = nn.CrossEntropyLoss()\n",
    "optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)\n",
    "#也可以选择Adam优化方法\n",
    "# optimizer = torch.optim.Adam(net.parameters(),lr=1e-2)   "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **Step3.模型训练**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1,  100] loss :2.292\n",
      "[1,  200] loss :2.261\n",
      "[1,  300] loss :2.195\n",
      "[1,  400] loss :1.984\n",
      "[1,  500] loss :1.337\n",
      "[1,  600] loss :0.765\n",
      "[1,  700] loss :0.520\n",
      "[1,  800] loss :0.427\n",
      "[1,  900] loss :0.385\n",
      "[2,  100] loss :0.339\n",
      "[2,  200] loss :0.301\n",
      "[2,  300] loss :0.290\n",
      "[2,  400] loss :0.260\n",
      "[2,  500] loss :0.250\n",
      "[2,  600] loss :0.245\n",
      "[2,  700] loss :0.226\n",
      "[2,  800] loss :0.218\n",
      "[2,  900] loss :0.206\n",
      "[3,  100] loss :0.183\n",
      "[3,  200] loss :0.176\n",
      "[3,  300] loss :0.174\n",
      "[3,  400] loss :0.156\n",
      "[3,  500] loss :0.160\n",
      "[3,  600] loss :0.147\n",
      "[3,  700] loss :0.146\n",
      "[3,  800] loss :0.130\n",
      "[3,  900] loss :0.115\n",
      "Finished Training\n"
     ]
    }
   ],
   "source": [
    "train_accs = []\n",
    "train_loss = []\n",
    "test_accs = []\n",
    "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n",
    "net = net.to(device)\n",
    "for epoch in range(3):\n",
    "    running_loss = 0.0\n",
    "    for i,data in enumerate(train_loader,0):#0是下标起始位置默认为0\n",
    "        # data 的格式[[inputs, labels]]       \n",
    "#         inputs,labels = data\n",
    "        inputs,labels = data[0].to(device), data[1].to(device)\n",
    "        #初始为0，清除上个batch的梯度信息\n",
    "        optimizer.zero_grad()         \n",
    "        \n",
    "        #前向+后向+优化     \n",
    "        outputs = net(inputs)\n",
    "        loss = criterion(outputs,labels)\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "        \n",
    "        # loss 的输出，每个一百个batch输出，平均的loss\n",
    "        running_loss += loss.item()\n",
    "        if i%100 == 99:\n",
    "            print('[%d,%5d] loss :%.3f' %\n",
    "                 (epoch+1,i+1,running_loss/100))\n",
    "            running_loss = 0.0\n",
    "        train_loss.append(loss.item())\n",
    "        \n",
    "        # 训练曲线的绘制 一个batch中的准确率\n",
    "        correct = 0\n",
    "        total = 0\n",
    "        _, predicted = torch.max(outputs.data, 1)\n",
    "        total = labels.size(0)# labels 的长度\n",
    "        correct = (predicted == labels).sum().item() # 预测正确的数目\n",
    "        train_accs.append(100*correct/total)\n",
    "        \n",
    "print('Finished Training')            "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "模型的保存"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "PATH = './mnist_net.pth'\n",
    "torch.save(net.state_dict(), PATH)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **Step4.模型评估**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "画图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "def draw_train_process(title,iters,costs,accs,label_cost,lable_acc):\n",
    "    plt.title(title, fontsize=24)\n",
    "    plt.xlabel(\"iter\", fontsize=20)\n",
    "    plt.ylabel(\"acc(\\%)\", fontsize=20)\n",
    "    plt.plot(iters, costs,color='red',label=label_cost) \n",
    "    plt.plot(iters, accs,color='green',label=lable_acc) \n",
    "    plt.legend()\n",
    "    plt.grid()\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "train_iters = range(len(train_accs))\n",
    "draw_train_process('training',train_iters,train_loss,train_accs,'training loss','training acc')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "检验一个batch的分类情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "GroundTruth:  0 6 4 8 3 8 4 8 0 0 6 3 9 8 2 3 4 4 6 0 5 7 6 3 1 6 6 3 9 4 7 5 0 2 5 0 0 8 8 9 3 0 8 2 4 1 2 1 0 6 5 5 7 3 9 5 1 5 7 6 4 2 7 7\n"
     ]
    }
   ],
   "source": [
    "dataiter = iter(test_loader)\n",
    "images, labels = dataiter.next()\n",
    "\n",
    "# print images\n",
    "test_img = utils.make_grid(images)\n",
    "test_img = test_img.numpy().transpose(1,2,0)\n",
    "std = [0.5,0.5,0.5]\n",
    "mean =  [0.5,0.5,0.5]\n",
    "test_img = test_img*std+0.5\n",
    "plt.imshow(test_img)\n",
    "plt.show()\n",
    "print('GroundTruth: ', ' '.join('%d' % labels[j] for j in range(64)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_net = CNN()\n",
    "test_net.load_state_dict(torch.load(PATH))\n",
    "test_out = test_net(images)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "输出的是每一类的对应概率，所以需要选择max来确定最终输出的类别\n",
    "dim=1 表示选择行的最大索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Predicted:  0 6 4 8 3 8 4 8 0 0 6 3 9 8 2 3 4 4 6 0 6 7 6 3 1 6 6 3 9 6 7 5 0 2 5 0 0 2 8 9 3 0 8 2 4 1 2 1 0 6 5 5 9 3 9 5 1 5 7 6 4 2 7 7\n"
     ]
    }
   ],
   "source": [
    "_, predicted = torch.max(test_out, dim=1)\n",
    "\n",
    "print('Predicted: ', ' '.join('%d' % predicted[j]\n",
    "                              for j in range(64)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "测试集上面整体的准确率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy of the network on the  test images: 96 %\n"
     ]
    }
   ],
   "source": [
    "correct = 0\n",
    "total = 0\n",
    "with torch.no_grad():# 进行评测的时候网络不更新梯度\n",
    "    for data in test_loader:\n",
    "        images, labels = data\n",
    "        outputs = test_net(images)\n",
    "        _, predicted = torch.max(outputs.data, 1)\n",
    "        total += labels.size(0)# labels 的长度\n",
    "        correct += (predicted == labels).sum().item() # 预测正确的数目\n",
    "\n",
    "print('Accuracy of the network on the  test images: %d %%' % (\n",
    "    100 * correct / total))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "10个类别的准确率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy of 0 : 99 %\n",
      "Accuracy of 1 : 98 %\n",
      "Accuracy of 2 : 96 %\n",
      "Accuracy of 3 : 91 %\n",
      "Accuracy of 4 : 97 %\n",
      "Accuracy of 5 : 95 %\n",
      "Accuracy of 6 : 96 %\n",
      "Accuracy of 7 : 93 %\n",
      "Accuracy of 8 : 94 %\n",
      "Accuracy of 9 : 92 %\n"
     ]
    }
   ],
   "source": [
    "class_correct = list(0. for i in range(10))\n",
    "class_total = list(0. for i in range(10))\n",
    "with torch.no_grad():\n",
    "    for data in test_loader:\n",
    "        images, labels = data\n",
    "        outputs = test_net(images)\n",
    "        _, predicted = torch.max(outputs, 1)\n",
    "        c = (predicted == labels)\n",
    "#         print(predicted == labels)\n",
    "        for i in range(10):\n",
    "            label = labels[i]\n",
    "            class_correct[label] += c[i].item()\n",
    "            class_total[label] += 1\n",
    "\n",
    "\n",
    "for i in range(10):\n",
    "    print('Accuracy of %d : %2d %%' % (\n",
    "        i, 100 * class_correct[i] / class_total[i]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 参考"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "https://aistudio.baidu.com/aistudio/projectdetail/307141\n",
    "\n",
    "https://blog.csdn.net/weixin_45885232/article/details/103950992\n",
    "\n",
    "https://zhuanlan.zhihu.com/p/30249139\n",
    "\n",
    "https://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html#sphx-glr-beginner-blitz-cifar10-tutorial-py"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
